package com.dkd.manage.service.impl;

import java.util.List;
import com.dkd.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dkd.manage.mapper.RegionMapper;
import com.dkd.manage.domain.Region;
import com.dkd.manage.domain.vo.RegionVo;
import com.dkd.manage.service.IRegionService;
import com.dkd.manage.mapper.EmpMapper;
import org.springframework.transaction.annotation.Transactional;

/**
 * 区域信息Service业务层处理
 * 
 * @author muxiu
 * @date 2025-08-27
 */
@Service
public class RegionServiceImpl implements IRegionService {
    @Autowired
    private RegionMapper regionMapper;

    @Autowired
    private EmpMapper empMapper;

    /**
     * 查询区域信息
     * 
     * @param id 区域信息主键
     * @return 区域信息
     */
    @Override
    public Region selectRegionById(Long id) {
        return regionMapper.selectRegionById(id);
    }

    /**
     * 查询区域信息列表
     * 
     * @param region 区域信息
     * @return 区域信息
     */
    @Override
    public List<Region> selectRegionList(Region region) {
        return regionMapper.selectRegionList(region);
    }

    /**
     * 新增区域信息
     * 
     * @param region 区域信息
     * @return 结果
     */
    @Override
    public int insertRegion(Region region) {
        region.setCreateTime(DateUtils.getNowDate());
        return regionMapper.insertRegion(region);
    }

    /**
     * 修改区域信息
     * 
     * @param region 区域信息
     * @return 结果
     */

    /**
     * Transactional(rollbackFor = Exception.class) 是 Spring
     * 框架中用于声明事务的注解。它的作用是：当被注解的方法执行过程中抛出任何 Exception
     * 类型（包括其子类）的异常时，Spring 会自动回滚该方法中所有已执行的数据库操作，确保数据一致性
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int updateRegion(Region region) {

        // 先更新区域信息
        region.setUpdateTime(DateUtils.getNowDate());
        int result = regionMapper.updateRegion(region);

        // 同步更新员工信息
        empMapper.updateByRegionId(region.getRegionName(), region.getId());
        return result;
    }

    /**
     * 批量删除区域信息
     * 
     * @param ids 需要删除的区域信息主键
     * @return 结果
     */
    @Override
    public int deleteRegionByIds(Long[] ids) {
        return regionMapper.deleteRegionByIds(ids);
    }

    /**
     * 删除区域信息信息
     * 
     * @param id 区域信息主键
     * @return 结果
     */
    @Override
    public int deleteRegionById(Long id) {
        return regionMapper.deleteRegionById(id);
    }

    // 添加处
    /**
     * 查询区域信息列表
     * 
     * @param region 区域信息
     * @return RegionVo集合
     */
    @Override
    public List<RegionVo> selectRegionVoList(Region region) {
        return regionMapper.selectRegionVoList(region);
    }
}
